草庐IT

Java Iterator(迭代器)

全部标签

c++ - 您是否必须在类似 STL 的类中实现多个迭代器?

我非常熟悉STL及其使用方法。我的问题是...如果我要实现自己的STL容器类型,如何定义内部迭代器?STL类往往具有顺序或随机访问迭代器、它们的const_版本和流迭代器。这些迭代器是否在每个STL类中都已完全定义,或者是否存在您从中继承的某种基类以获得大部分迭代器功能?有谁知道有关如何实现支持这些不同类型的迭代器的类的良好引用? 最佳答案 一般来说,你只需要实现iterator和const_iterator.如果需要反向迭代器,可以使用std::reverse_iterator的实例化.流迭代器将使用operator>>和oper

c++ - 迭代器或指针的 std::enable_if 或 SFINAE

我想为MyClass编写一个带有参数的构造函数,并且我希望仅当参数是一个pointer或iterator(具有iterator_traits的东西)。如何实现? 最佳答案 遗憾的是,没有标准的方法来检测类是否为Iterator模型。最简单的检查是*it和++it在语法上都是有效的;您可以使用标准SFINAE技术执行此操作:template(),void(),++std::declval(),void())>MyClass(T);考虑到24.2.2:2中的Iterator要求:templatetypenamestd::enable_i

c++ - vector 迭代器 : no match for ‘operator=’

考虑到下面第一个代码片段中的C++代码,我得到了第二个代码片段中指示的编译错误。看起来我在遍历vector实例时做错了。你能告诉我如何克服这些编译问题吗?谢谢。代码中标记了LINE171。片段1(代码)#include#include#includeclassVipAddressSetEntity:BaseEntity{public:VipAddressSetEntity():BaseEntity(){}VipAddressSetEntity(std::string&uuid,std::string&name):BaseEntity(uuid,name){}VipAddressSetE

c++ - 迭代单个左值

我想将单个左值传递给需要一对迭代器的函数,并且它的行为就像我将一对迭代器传递给仅包含该值的范围一样。我的做法如下:#include#includetemplatevoiditerate_over(Iterbegin,Iterend){for(autoi=begin;i!=end;++i){std::couta{1,2,3,4};iterate_over(a.cbegin(),a.cend());intb=5;iterate_over(&b,std::next(&b));}这在g++5.2中似乎可以正常工作,但我想知道这是否是实际定义的行为,是否存在任何潜在问题?

c++ - 从 Boost 多索引迭代器获取数字索引

我正在存储以下内容structArticle{std::stringtitle;unsigneddb_id;//idfieldinMediaWikidatabasedump};在Boost.MultiIndex容器中,定义为typedefboost::multi_index_container,hashed_unique,member>,hashed_unique,member>>>ArticleSet;现在我有两个迭代器,一个来自index和一个来自index.在不向structArticle添加数据成员的情况下,将这些索引转换为容器的随机访问部分的最简单方法是什么??

c++ - 如何将迭代器限制为前向迭代器?

我有一个函数需要多次枚举一个迭代器,但是accordingtoMSDN,“一旦您递增输入迭代器的任何拷贝,此后就无法安全地比较、取消引用或递增任何其他拷贝。”因此,为了让事情变得更简单,我不想为复制数据并枚举拷贝的非前向迭代器创建单独的实现,而是想将我的方法限制为仅接受前向迭代器,并静态拒绝输入迭代器。现在我有这样的东西:templateboolEnumerateTwice(constIt&begin,constIt&end,TCallbackcallback){for(Itit=begin;it!=end;++it)if(!callback(*it))returnfalse;for(

将最后一个迭代的值分配给Python中的变量

我有最后一组迭代的值:y1[i],y2[i],y3[i](是通过进行耦合ode的集成而获得的)现在,我需要将这些值分配给另一个变量:y1,y2,y3,然后在函数f(y,t)中使用这些变量(必须再次集成的odes)。这是我的代码的一部分:#constantsusedH=2.27e-18l=1.5G=6.637*(10**(-11))k=(8*3.14*G)**0.5om_de=0.75omega_matter=1-om_dew0=-0.85rho_c=3*(H**2)/(k**2)c=((om_de*(1+w0)*rho_c)/(H**2))**0.5v0=(om_de*(1-w0)*rho_c

是否可以将**迭代器转换为常规承诺?

我正在为keepassxcwebextension。它使用Redux-Saga频道来使外观镀铬消息同步。它(联合国)非常好。但是,我想完全抽象的redux-saga,看起来像正常函数返回承诺的方式。tl;drkeepAssxc-browser将是浏览器扩展程序,它将允许从浏览器中检索存储在keepASSXC应用中的密码。有两个可能的通信协议:HTTP和NativeClient。因此,我决定使用Typescript接口,并根据通信协议的不同,将有两个实现此接口的类。界面:interfaceKeepass{getDatabaseHash():Promise;getCredentials(origi

c++ - 使用迭代器将 std::vector 附加到它自己的元素

以下代码按预期工作(测试通过),但我想知道以这种方式使用迭代器在C++中是否被认为是一种不好的做法,或者它是否可以。也许这是特定于std::vector和其他集合的行为不同并且最佳实践因集合(甚至它们的实现)而异?在其他语言中肯定不行,而且大多数时候更改集合会使迭代器无效并抛出异常。BOOST_AUTO_TEST_CASE(ReverseIteratorExample){std::vectormyvector;for(inti=0;iresultVector(resultset,resultset+sizeof(resultset)/sizeof(resultset[0]));BOOS

c++ - 输入迭代器跳过空格,任何防止这种跳过的方法

我正在从一个文件中读取一个字符串,直到我到达一个定界字符,即美元符号。但是输入迭代器正在跳过空格,因此创建的字符串没有空格。在这种情况下不是我想要的。有什么办法可以阻止跳过行为吗?如果是的话怎么办?这是我的测试代码。#include#include#include#include//istreamiteratorisskippingwhitespace.HowdoIgetallchars?voidreadTo(std::istream_iteratoriit,std::string&replaced){while(iit!=std::istream_iterator()){charch